package br.edu.univas.si.lab3.bankmanager.view;

import java.awt.BorderLayout;
import java.sql.Array;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Map;

import javax.swing.JButton;
import javax.swing.JDialog;

import br.edu.univas.si.lab3.bankmanager.listeners.BotoesListener;
import br.edu.univas.si.lab3.bankmanager.listeners.ListarListener;
import br.edu.univas.si.lab3.bankmanager.listeners.SaldoListener;
import br.edu.univas.si.lab3.bankmanager.model.ClienteTO;
import br.edu.univas.si.lab3.bankmanager.model.ContaTO;

public class FrameListar extends JDialog{
	private static final long serialVersionUID = 1L;
	
	private ContaTO conta;
	private ClienteTO cliente;
	private PanelContaInfo panelContaInfo;
	private Integer modificador;
	private PanelLista panelLista;
	private PanelOKButton panelOKButton;
	
	private ArrayList<SaldoListener> listenersSaldo = new ArrayList<SaldoListener>();
	private ArrayList<ListarListener> listenersLista = new ArrayList<ListarListener>();
	
	public FrameListar(ClienteTO cliente, ContaTO conta, Integer modificador) {
		this.conta = conta;
		this.cliente = cliente;
		this.modificador = modificador;
		if(modificador == 1){
			setTitle("Dados do Cliente");
		}
		else if(modificador == 2){
			setTitle("Saldo do Cliente");
		}
		setLayout(new BorderLayout());
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		if(modificador == 1){
			setSize(430, 500);
		}
		else if(modificador == 2){
			setSize(450, 200);
		}
		initialize();
		setLocationRelativeTo(null);
		setResizable(false);
		setModal(true);
	}

	private void initialize() {
		if(modificador == 1){
			add(getPanelLista() , BorderLayout.CENTER);
			
		}
		else if(modificador == 2){
		    add(getPanelContaInfo(), BorderLayout.CENTER);
		}
		add(getPanelOKButton(),BorderLayout.SOUTH);
		
	}

	private PanelLista getPanelLista() {
		if(panelLista == null) {
			panelLista = new PanelLista(conta,cliente);
		}
		return panelLista;
	}

	private PanelContaInfo getPanelContaInfo() {
		if(panelContaInfo == null){
			panelContaInfo = new PanelContaInfo(this.conta,cliente);
		}
		return panelContaInfo;
	}

	private PanelOKButton getPanelOKButton(){
		if(panelOKButton == null) {
			panelOKButton = new PanelOKButton();
			panelOKButton.addBotoesListeners(new BotoesListener() {
				
				@Override
				public void okPerformed() {
					if(modificador == 1){
						for(ListarListener listener : listenersLista){
							listener.listarOK();
						}
					}
					else if(modificador == 2){
						for(SaldoListener listener : listenersSaldo){
							listener.saldoOK();
						}
					}
					                                             
					
				}
				
				@Override
				public void cancelarPerformed() {}
			});
		}
		return panelOKButton;
			
	}
	
	public void addSaldolisteners(SaldoListener listener) {
		listenersSaldo.add(listener);
	}

	public void addListarListeners(ListarListener listener) {
		listenersLista.add(listener);
	}

}
